<!--
 * @Descripttion: 
 * @version: 
 * @Author: wtzhang
 * @Date: 2021-08-02 13:53:34
 * @LastEditors: wtzhang
 * @LastEditTime: 2021-08-03 16:33:41
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>借助构造器初始化state，使用</title>
</head>

<body>
  <div id="app"></div>
  <script src="../js/old_version/react.development.js"></script>
  <script src="../js/old_version/babel.min.js"></script>
  <script src="../js/old_version/react-dom.development.js"></script>
  <script type="text/babel">
    // 创建类组件
    class Weather extends React.Component {
      constructor(props) {
        super()
        this.state = {
          isHot: false
        },
        // 解决changeWeather this指向问题
        this.changeWeather = this.changeWeather.bind(this)
        /*
          bind() 做啥呢？
            1. bind() 可以生成一个新的函数
            2. 帮你改了函数里的this，具体改了什么，就要看你传了什么
        */
      }
      render(){
        console.log(this);
        let hot = this.state.isHot
        return <h3 onClick={this.changeWeather}>今天天气好{hot ? '热' : '凉爽'}！</h3>
      }
      changeWeather() {
        /*
          changeWeather放在哪？ --- Weather的原型对象上，供实例使用。
          由于changeWeather是作为onClick的回调，所以不是通过实例调用的，是函数体 直接调用；本应this会指向 window
          但是 类中的方法默认开启了局部的严格模式，所以changeWeather中的this为undefined
        */
        console.log(this);
        const isHot = this.state.isHot
        // 严重注意：状态（state）不可直接更改，下面这行就是直接更改。
        // this.state.isHot = !isHot // 无效
        // console.log(this.state.isHot);
        
        // 注意：状态（state）更新必须通过setState()进行更新
        this.setState({
          isHot: !isHot
        })
      }
    }
    // 渲染组件到页面
    // ReactDOM.render(虚拟DOM, 容器)
    ReactDOM.render(<Weather />, document.getElementById('app'))
  </script>
</body>

</html>
